// 初始化一个 AppServer 示例对象
const express = require('express')
const AppServer = express()


// 使用全局配置 响应头进行解决浏览器同源策略
// const cors = require('cors')
// AppServer.use(cors())
AppServer.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With,content-type,*");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});


// 全局使用将 JwT 字符串解析还原成 JSON 对象的中间件
const JWTConfig = require('./JWT_Config')
const expressJWT = require('express-jwt')
// .unless({ path:[/^\/user\//] }))  => 代表 API 中 带有 /user 的都不需要进行设置请求头的 Authorization: Bearer <token值> 【俗 ：身份认证】
AppServer.use(expressJWT({ secret: JWTConfig.secretKey, algorithms: ['HS256'] }).unless({ path:[/^\/user\//] }))


// 捕获解析 JWT 失败后产生的错误
AppServer.use((err, req, res, next) => {
    // Token 解析失败导致的错误
    if(err.name === "UnauthorizedError"){
        return res.send({status: 404, message: '身份认证失败！'})
    }
    res.send({status: 500, message: '未知错误！'})
})


// 解决后台接收不到发送过来的请求体
AppServer.use(express.json())
AppServer.use(express.urlencoded({extended: false}));	


// 引入 user_router 路由文件
const user_router = require('./router/user')
const getUserInfo_router = require('./router/getInfo')
AppServer.use('/user', user_router)
AppServer.use(getUserInfo_router)



// 部署静态 goodsimgs 文件
AppServer.use('/user/userImgs', express.static('./userImgs'))


// 启动服务器
AppServer.listen(3030, () => {
console.log("http://localhost:3030" ,'服务器启动成功')
})